package com.kernel;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

/****************************************
 * @name Demo
 * @description
 * @author 黄彬恒
 * @since 2018/7/13
 ***************************************/
public class DemoFile {

    /*
     * 我们利用反射和配置文件，可以使：应用程序更新时，对源码无需进行任何修改
     * 我们只需要将新类发送给客户端，并修改配置文件即可
     */

    public static void main(String[] args) throws Exception {
        //通过反射获取Class对象
        Class<?> stuClass = Class.forName(getValue("className"));//"com.kernel.Student"
        //2获取show()方法
        Method m = stuClass.getMethod(getValue("methodName"));//show
        //3.调用show()方法
        m.invoke(stuClass.getConstructor().newInstance());

    }

    //此方法接收一个key，在配置文件中获取相应的value
    private static String getValue(String key) throws IOException {
        Properties pro = new Properties();//获取配置文件的对象
//        FileReader in = new FileReader("pro.txt");//获取输入流
        InputStream in = DemoFile.class.getResourceAsStream("/pro.txt");
        pro.load(in);//将流加载到配置文件对象中
        in.close();
        return pro.getProperty(key);//返回根据key获取的value值
    }
}
